
void ReadSensors(int16* value_array)
{
	set_adc_channel(13);		//Last left sensor
 	*(value_array)=read_ADC();
	delay_us(10);
	set_adc_channel(11); 
	*(value_array+1)=read_ADC();
	delay_us(10);
	set_adc_channel(9); 
	*(value_array+2)=read_ADC();
	delay_us(5);
	set_adc_channel(7); 
	*(value_array+3)=read_ADC();
	delay_us(5);
	set_adc_channel(5); 
	*(value_array+4)=read_ADC();
	delay_us(5);
	set_adc_channel(3); 
	*(value_array+5)=read_ADC();
	delay_us(5);
	set_adc_channel(1); 
	*(value_array+6)=read_ADC();
	delay_us(5);
	set_adc_channel(0);			//Center sensor			 
	*(value_array+7)=read_ADC();
	delay_us(5);
	set_adc_channel(2); 
	*(value_array+8)=read_ADC();
	delay_us(5);
	set_adc_channel(4); 
	*(value_array+9)=read_ADC();
	delay_us(5);
	set_adc_channel(6); 
	*(value_array+10)=read_ADC();
	delay_us(5);
	set_adc_channel(8); 
	*(value_array+11)=read_ADC();
	delay_us(5);
	set_adc_channel(10); 
	*(value_array+12)=read_ADC();
	delay_us(5);
	set_adc_channel(12); 
	*(value_array+13)=read_ADC();
	delay_us(10);
	set_adc_channel(14); 		//Last right sensor
	*(value_array+14)=read_ADC();
}

void GetBlackLimit(int16* limit,int st_index,int end_index,int16* array)
{
	int i=0;
	int16 min=1024,max=0;
	for(i=st_index;i<=end_index;i++)
	{	
		if(*(array+i)>max) max=*(array+i);
		if(*(array+i)<min) min=*(array+i);
	}
	if(((float)max-(float)min)>204) *limit=min+(int16)((max-min)*0.5);//Limite un 80% arriba del minimo
}

void DigitalizeArray(int16* array_ADC,int16* array_BIN,int16 limit,int st_index,int end_index)
{
	int i=0;
	for(i=st_index;i<=end_index;i++)
	{	
		if(*(array_ADC+i)>limit) *(array_BIN+i)=1;
		if(*(array_ADC+i)<=limit)*(array_BIN+i)=0;
	}
}
void GetAverageCenter(int16* array_BIN,int st_index,int end_index,float* center)
{
	int i=0;
	float pixels_b=0,values_b=0,pixels_w=0,values_w=0;
	for(i=st_index;i<=end_index;i++)
	{	
		if(*(array_BIN+i)==1)
			{
				values_w=values_w+(i+1);
				pixels_w=pixels_w+1;
			}
		if(*(array_BIN+i)==0)
			{
				values_b=values_b+(i+1);
				pixels_b=pixels_b+1;
			}
	}
	if(pixels_w!=15 && pixels_b!=15 ) 
		{
			if(pixels_w<pixels_b) *center=values_w/pixels_w;
			if(pixels_b<pixels_w) *center=values_b/pixels_b;
		}
	else *center=-1;
}

void PoweredError(float error, float* correction, float max, float max_c)
{
	float step=1,value;
	step=step/max;
	if(error!=0)
	{
		step=error*step;
		value=step*step;
		*correction=max_c*value;
		if(error<0)	*correction=*correction*-1;
	}
	else *correction=0;
	
}